# 集合
print("-------------Set----------------------")
s1 = {1, 2, 3}
print(s1)  # {1, 2, 3}
print(type(s1))  # <class 'set'>
print({})  # {}
print(type({}))  # <class 'dict'>

# 空set
print("-------------Set----------------------")
s2 = set()
print(type(s2))  # <class 'set'>


# 集合无序: 涉及到 hash 表
s3 = {"a", "b", "c", "d", "e", "f"}
print(hash("a"))
print(hash("b"))
print(hash("c"))

# 集合数字
# python 中 int 整型的hash值就是它本身 在hash表中的位置不会发生改变

# 无序性: 不能修改集合中的值

# 唯一性: 集合中不能有重复的元素, 如果添加的元素在原集合有了, 不会有任何操作

# 常见操作
# 1. 增加: 只能添加一个元素, 不能添加 list 和 dict
s3.add("g")
print(s3)  # {'f', 'c', 'e', 'b', 'g', 'a', 'd'}
s3.add(("i", "j"))
print(
    f"after add tuple(i,j): {s3}"
)  # after add i,j: {('i', 'j'), 'c', 'd', 'e', 'f', 'g', 'a', 'b'}


# update: 参数要是可迭代对象
s3.update([1, 2, 3, 4])
print(
    f"after add list[1,2,3,4]: {s3}"
)  # after add list[1,2,3,4]: {1, 'b', 2, 3, 4, 'd', 'e', 'g', 'f', 'c', ('i', 'j'), 'a'}


s3.update({"name": "leslie", "age": 19})
print(
    f"after add dict: {s3}"
)  # after add dict: {'f', 1, 2, 3, 4, 'e', 'g', 'd', 'b', 'c', 'age', 'a', ('i', 'j'), 'name'}

# 2. 删除 - remove: 没有这个元素会报错
s3.remove("a")
print(
    f"after remove a: {s3}"
)  # after remove a: {1, 'c', 2, 3, 4, 'f', 'age', 'name', 'd', ('i', 'j'), 'e', 'g', 'b'}

# 2. 删除 - pop: remove the 1st after hash sort.
s3.pop()
print(
    f"after pop: {s3}"
)  # after pop: {1, 2, 3, 'e', 4, 'c', 'g', 'name', ('i', 'j'), 'f', 'age', 'd'}

# 2. 删除 - discard: 参数为要删除的元素,没有元素则什么都不做
s3.discard("c")
print(
    f"after discard c: {s3}"
)  # after discard c: {'d', 2, 3, 4, 'age', 'b', 'g', 'e', ('i', 'j'), 'name', 'f'}
